package com.daiTest.advice;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

@Component
//声明这个类是个切面
@Aspect
//设置优先级
@Order(5)
public class LogAdvice {
    //这里演示的是在方法执行前执行 
    //注意在注解的括号内可以指定方法 *的意思就是所有 .就是所有方法
    @Before("execution(* com..service.*.*(..))")
    public void before(JoinPoint joinPoint) {
        System.out.println("LogAdvice.before");
        System.out.println("joinPoint = " + joinPoint);
    }

    //这里演示的是方法返回后
    @AfterReturning(value = "execution(* com..service.*.*(..))")
    public void printLogAfterSuccess() {
        System.out.println("[AOP返回通知] 方法成功返回了");
    }

    //这里演示的是方法抛异常了
    @AfterThrowing(value = "execution(* com..service.*.*(..))")
    public void printLogAfterException() {
        System.out.println("[AOP异常通知] 方法抛异常了");
    }

    //这里演示的是方法执行之后
    @After(value = "execution(* com..service.*.*(..))")
    public void printLogFinallyEnd() {
        System.out.println("[AOP后置通知] 方法最终结束了");
    }

}